package Experimentos;

import aima.search.framework.Problem;
import aima.search.framework.Search;
import aima.search.framework.SearchAgent;
import aima.search.informed.HillClimbingSearch;

import comun.Fichero;
import comun.GeneradorProblemas;

public class Main7 {
	public static void main(String [] args){
	int numPruebas = 10;
	System.out.println("peticionesXuser ResultadoC1 TiempoC1 ResultadoC2 TiempoC2");
	GeneradorProblemas generador = new GeneradorProblemas();
	
	try {
		Fichero f2 = new Fichero("Experimento 7.txt");
		for (int j = 5; j <= 25; j +=5) {
			int resulta = 0;
			int resultb = 0;
			long timea = 0;
			long timeb = 0;
			for(int i = 0; i < numPruebas; i++){
				//Genera el estado inicial
				generador.cambioParametros(200, 5,50,j);
				esc1Caso1.Estado caso1 = new esc1Caso1.Estado(generador.getPeticiones(), generador.getServidores(), generador.getNumServidores());
				esc1Caso2.Estado caso2 = new esc1Caso2.Estado(generador.getPeticiones(), generador.getServidores(), generador.getNumServidores());

				caso1.generarEstadoInicialMenorTiempo();
				caso2.generarEstadoInicialMenorTiempo();

				//Crea y resuelve el problema
				Problem problema = new Problem(caso1, new esc1Caso1.FuncionSuccesores(false), new esc1Caso1.EsEstadoFinal() , new esc1Caso1.Heuristico());
				Problem problemb = new Problem(caso2, new esc1Caso2.FuncionSuccesores(false), new esc1Caso2.EsEstadoFinal() , new esc1Caso2.Heuristico(0.3));

				//Crea y resuelve el problema
				Search algoritmoa = new HillClimbingSearch();
				Search algoritmob = new HillClimbingSearch();

				long inita = System.currentTimeMillis();
				SearchAgent agenta = new SearchAgent(problema, algoritmoa);
				long fia = System.currentTimeMillis();
				
				long initb = System.currentTimeMillis();
				SearchAgent agentb = new SearchAgent(problemb, algoritmob);
				long fib = System.currentTimeMillis();

				esc1Caso1.Estado resultadoa = (esc1Caso1.Estado) algoritmoa.getGoalState();
				esc1Caso2.Estado resultadob = (esc1Caso2.Estado) algoritmob.getGoalState();
				
				resulta += resultadoa.getTiempoTotal();
				resultb += resultadob.getTiempoTotal();
				
				timea += (fia - inita);
				timeb += (fib - initb);
				
			}
			String txt = j +" " + resulta/10 +" "+ timea/10 +" "+ resultb/10 + " " + timeb/10;
			System.out.println(txt);

			f2.escribe(txt);
		}
		f2.cierraF();
	} catch (Exception e) {
		e.printStackTrace();
	}


}
}
